package com.example.teaching_server;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 教学服务系统主启动类
 * 使用@SpringBootApplication标注表示这是Spring Boot应用的主配置类
 *
 * @author 开发团队
 * @since 1.0.0
 */
@SpringBootApplication
@EntityScan("com.example.teaching_server.entity")
public class TeachingServerApplication {

    /**
     * 应用主入口
     *
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        SpringApplication.run(TeachingServerApplication.class, args);
    }

    /**
     * 全局CORS(跨域资源共享)配置
     *
     * @return WebMvcConfigurer实例，用于配置跨域规则
     */
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                // 配置跨域规则
                registry.addMapping("/**")         // 对API路径生效
                        .allowedOriginPatterns("*")    // 使用allowedOriginPatterns替代allowedOrigins
                        .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS", "PATCH")
                        .allowedHeaders("*")
                        .allowCredentials(false)
                        .maxAge(3600);

                // 单独配置Swagger文档路径
                registry.addMapping("/swagger-ui/**")
                        .allowedOriginPatterns("*")
                        .allowedMethods("GET")
                        .allowCredentials(false)
                        .maxAge(3600);

                registry.addMapping("/v3/api-docs/**")
                        .allowedOriginPatterns("*")
                        .allowedMethods("GET")
                        .allowCredentials(false)
                        .maxAge(3600);
            }
        };
    }
}

/**
 * 健康检查控制器
 * 用于验证服务是否正常启动和运行状态监控
 *
 * @author 开发团队
 * @since 1.0.0
 */
@RestController
class HealthCheckController {

    /**
     * 服务健康检查接口
     *
     * @return 服务状态信息
     */
    @GetMapping("/health")
    public HealthResponse health() {
        return HealthResponse.builder()
                .status("UP")
                .message("教学服务平台运行正常")
                .timestamp(java.time.LocalDateTime.now())
                .build();
    }

    /**
     * 测试接口
     *
     * @return 欢迎字符串
     */
    @GetMapping("/hello")
    public String hello() {
        return "教学服务平台服务已启动！当前时间：" + java.time.LocalDateTime.now();
    }

    /**
     * 健康检查响应DTO
     */
    @lombok.Data
    @lombok.Builder
    @lombok.NoArgsConstructor
    @lombok.AllArgsConstructor
    static class HealthResponse {
        /**
         * 服务状态
         */
        private String status;

        /**
         * 状态消息
         */
        private String message;

        /**
         * 检查时间
         */
        private java.time.LocalDateTime timestamp;
    }
}
